<#assign pojo=oneToManyPojo.getOne()>
<#assign many=oneToManyPojo.getMany()>
<#assign ones=oneToManyPojo.getOnes()>
package ${pojo.getPackageName()}.service;

<#assign classbody>
<#assign declarationName = pojo.importType(pojo.getDeclarationName())>
/**
 * @author bo.wang
 */
public class Base${declarationName}Service extends BaseService{

	public static final String BEAN_ID="${pojo.getDeclarationNameFirstLetterLower()}Service";

	@Resource
	${declarationName}Dao ${pojo.getDeclarationNameFirstLetterLower()}Dao;

	public IDao getDao() {
		return ${pojo.getDeclarationNameFirstLetterLower()}Dao;
	}

	public List<${declarationName}VO> convert${declarationName}ToVO(List<${declarationName}> models){
		List<${declarationName}VO> result=new ArrayList<${declarationName}VO>();
		for(${declarationName} initiation:models){
		${declarationName}VO inparam=convert${declarationName}ToVO(initiation);
			result.add(inparam);
		}
		return result;
	}
	public ${declarationName}VO convert${declarationName}ToVO(${declarationName} model){
		${declarationName}VO inparam=new ${declarationName}VO();
		ReflectUtils.copyProperties(model, inparam);
		return inparam;
	}
	public ${declarationName} convert${declarationName}VOTo(${declarationName}VO vo){
		${declarationName} entity=new ${declarationName}();
		ReflectUtils.copyProperties(vo, entity);
		return entity;
	}
	public List<${declarationName}> convert${declarationName}VOTo(List<${declarationName}VO> vos){
		List<${declarationName}> result=new ArrayList<${declarationName}>();
		for(${declarationName}VO vo:vos){
			${declarationName} entity=convert${declarationName}VOTo(vo);
			result.add(entity);
		}
		return result;
	}
	<#foreach child in many>
		<#assign childdeclarationName = child.importType(child.getDeclarationName())>
		<#assign tempchild=child>
	protected List<${childdeclarationName}VO> convert${childdeclarationName}ToVO(List<${childdeclarationName}> models){
		List<${childdeclarationName}VO> result=new ArrayList<${childdeclarationName}VO>();
		for(${childdeclarationName} initiation:models){
		${childdeclarationName}VO inparam=convert${childdeclarationName}ToVO(initiation);
			result.add(inparam);
		}
		return result;
	}
	public ${childdeclarationName}VO convert${childdeclarationName}ToVO(${childdeclarationName} model){
		${childdeclarationName}VO inparam=new ${childdeclarationName}VO();
		ReflectUtils.copyProperties(model, inparam);
		return inparam;
	}
	public ${childdeclarationName} convert${childdeclarationName}VOTo(${childdeclarationName}VO vo){
		${childdeclarationName} entity=new ${childdeclarationName}();
		ReflectUtils.copyProperties(vo, entity);
		return entity;
	}
	public List<${childdeclarationName}> convert${childdeclarationName}VOTo(List<${childdeclarationName}VO> vos){
		List<${childdeclarationName}> result=new ArrayList<${childdeclarationName}>();
		for(${childdeclarationName}VO vo:vos){
		${childdeclarationName} entity=convert${childdeclarationName}VOTo(vo);
			result.add(entity);
		}
		return result;
	}
	</#foreach>
	<#foreach child in ones>
		<#assign childdeclarationName = child.importType(child.getDeclarationName())>
	public ${childdeclarationName} find${childdeclarationName}(Map params)
    {
        Object value=params.get("${pojo.getDeclarationNameFirstLetterLower()}Id");
        AssertHelper.notEmpty_assert("${childdeclarationName}关联主键不能为空");
		${declarationName} ${pojo.getDeclarationNameFirstLetterLower()}=(${declarationName}) ${pojo.getDeclarationNameFirstLetterLower()}Dao.get(${declarationName}.class, value.toString());
        //return ${pojo.getDeclarationNameFirstLetterLower()}Dao.find${childdeclarationName}(params);
		${childdeclarationName} result= ${pojo.getDeclarationNameFirstLetterLower()}.get${childdeclarationName}();
        if(result==null)
        {
            result=new ${childdeclarationName}();
        }
        return result;
    }
	</#foreach>

	public DaoPage find${declarationName}VOByParams(Map params, Integer pageIndex,
			Integer pageSize) {
		if(params==null)
		{
			params=new HashMap();
		}
		DaoPage daoPage= ${pojo.getDeclarationNameFirstLetterLower()}Dao.find${declarationName}ByParams(params, pageIndex, pageSize);
		daoPage.setResult(convert${declarationName}ToVO((List<${declarationName}>) daoPage.getResult()));
		return daoPage;
	}

	public List<${declarationName}VO> find${declarationName}VOByParams(Map params) {
		if(params==null)
		{
			params=new HashMap();
		}
		List<${declarationName}> temp= ${pojo.getDeclarationNameFirstLetterLower()}Dao.find${declarationName}ByParams(params);
		return convert${declarationName}ToVO(temp);
	}

    public DaoPage find${declarationName}ByParams(Map params, Integer pageIndex,
        Integer pageSize) {
        if(params==null)
        {
            params=new HashMap();
        }
        DaoPage daoPage= ${pojo.getDeclarationNameFirstLetterLower()}Dao.find${declarationName}ByParams(params, pageIndex, pageSize);
        return daoPage;
    }

    public List<${declarationName}> find${declarationName}ByParams(Map params) {
        if(params==null)
        {
            params=new HashMap();
        }
        List<${declarationName}> temp= ${pojo.getDeclarationNameFirstLetterLower()}Dao.find${declarationName}ByParams(params);
        return temp;
    }


	public void save${declarationName}DataListsMap(Map<String,List<${declarationName}VO>> dataListsMap) {
		Collection<${declarationName}VO> deleteList = BatchUtils.to(${declarationName}VO.class).getDeleteEntities(dataListsMap);
		Collection<${declarationName}VO> insertList =  BatchUtils.to(${declarationName}VO.class).getInsertEntities(dataListsMap);
		Collection<${declarationName}VO> updateList =  BatchUtils.to(${declarationName}VO.class).getModifiedEntities(dataListsMap);
		if (updateList != null&&updateList.size() > 0) {
			for(${declarationName}VO vo: updateList){
				${declarationName} entity=convert${declarationName}VOTo(vo);
				${pojo.getDeclarationNameFirstLetterLower()}Dao.update(entity);
			}
//			${pojo.getDeclarationNameFirstLetterLower()}Dao.updateAll(updateList);
		}
		if (insertList != null&&insertList.size() > 0) {
			for(${declarationName}VO vo: insertList){
				${declarationName} entity=convert${declarationName}VOTo(vo);
				${pojo.getDeclarationNameFirstLetterLower()}Dao.save(entity);
				vo.setId(entity.getId());
			}
//			${pojo.getDeclarationNameFirstLetterLower()}Dao.saveAll(insertList);
		}
		if (deleteList != null&&deleteList.size() > 0) {
			for(${declarationName}VO vo:deleteList){
				${declarationName} entity=new ${declarationName}();
				entity.setId(vo.getId());
				${pojo.getDeclarationNameFirstLetterLower()}Dao.remove(entity);
			}
//			${pojo.getDeclarationNameFirstLetterLower()}Dao.removeAll(deleteList);
		}

	}
<#foreach child in many>
<#assign childdeclarationName = child.importType(child.getDeclarationName())>
<#assign tempchild=child>

	public DaoPage find${childdeclarationName}VOByParams(Map params, Integer pageIndex,
			Integer pageSize) {
		if(params==null)
		{
			params=new HashMap();
		}
		DaoPage daoPage= ${pojo.getDeclarationNameFirstLetterLower()}Dao.find${childdeclarationName}ByParams(params, pageIndex, pageSize);
		daoPage.setResult(convert${childdeclarationName}ToVO((List<${childdeclarationName}>) daoPage.getResult()));
		return daoPage;
	}

	public List<${childdeclarationName}VO> find${childdeclarationName}VOByParams(Map params) {
		if(params==null)
		{
			params=new HashMap();
		}
		List<${childdeclarationName}> temp= ${pojo.getDeclarationNameFirstLetterLower()}Dao.find${childdeclarationName}ByParams(params);
		return convert${childdeclarationName}ToVO(temp);
	}

    public DaoPage find${childdeclarationName}ByParams(Map params, Integer pageIndex,
        Integer pageSize) {
        if(params==null)
        {
            params=new HashMap();
        }
        DaoPage daoPage= ${pojo.getDeclarationNameFirstLetterLower()}Dao.find${childdeclarationName}ByParams(params, pageIndex, pageSize);
        return daoPage;
    }

    public List<${childdeclarationName}> find${childdeclarationName}ByParams(Map params) {
        if(params==null)
        {
            params=new HashMap();
        }
        return ${pojo.getDeclarationNameFirstLetterLower()}Dao.find${childdeclarationName}ByParams(params);
    }

	public void save${childdeclarationName}DataListsMap(Map<String,List<${childdeclarationName}VO>> dataListsMap) {
		Collection<${childdeclarationName}VO> deleteList = BatchUtils.to(${childdeclarationName}VO.class).getDeleteEntities(dataListsMap);
		Collection<${childdeclarationName}VO> insertList =  BatchUtils.to(${childdeclarationName}VO.class).getInsertEntities(dataListsMap);
		Collection<${childdeclarationName}VO> updateList =  BatchUtils.to(${childdeclarationName}VO.class).getModifiedEntities(dataListsMap);
		if (updateList != null&&updateList.size() > 0) {
			for(${childdeclarationName}VO vo: updateList){
				${childdeclarationName} entity=convert${childdeclarationName}VOTo(vo);
				${pojo.getDeclarationNameFirstLetterLower()}Dao.update(entity);
			}
//			${pojo.getDeclarationNameFirstLetterLower()}Dao.updateAll(updateList);
		}
		if (insertList != null&&insertList.size() > 0) {
			for(${childdeclarationName}VO vo: insertList){
				${childdeclarationName} entity=convert${childdeclarationName}VOTo(vo);
				${pojo.getDeclarationNameFirstLetterLower()}Dao.save(entity);
				vo.setId(entity.getId());
			}
//			${pojo.getDeclarationNameFirstLetterLower()}Dao.saveAll(insertList);
		}
		if (deleteList != null&&deleteList.size() > 0) {
			for(${childdeclarationName}VO vo:deleteList){
				${childdeclarationName} entity=new ${childdeclarationName}();
				entity.setId(vo.getId());
				${pojo.getDeclarationNameFirstLetterLower()}Dao.remove(entity);
			}
//			${pojo.getDeclarationNameFirstLetterLower()}Dao.removeAll(deleteList);
		}
	}
</#foreach>
<#foreach child in ones>
<#assign childdeclarationName = child.importType(child.getDeclarationName())>
</#foreach>
}
</#assign>
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import java.util.HashMap;

import javax.annotation.Resource;

import org.springframework.stereotype.Component;

import com.ling.pl.core.commons.support.DaoPage;
import com.ling.pl.core.commons.utils.AssertHelper;
import com.ling.pl.core.commons.utils.BatchUtils;
import com.ling.pl.core.commons.utils.reflect.ReflectUtils;
import com.ling.pl.core.dao.IDao;
import com.ling.pl.core.service.impl.BaseService;
import ${pojo.getPackageName()}.model.${declarationName};
import ${pojo.getPackageName()}.model.${declarationName}VO;
import ${pojo.getPackageName()}.model.${declarationName};
<#foreach child in many>
<#assign childdeclarationName = child.importType(child.getDeclarationName())>
import ${child.getPackageName()}.model.${childdeclarationName};
import ${child.getPackageName()}.model.${childdeclarationName}VO;
import ${child.getPackageName()}.model.${childdeclarationName};
</#foreach>
<#foreach child in ones>
<#assign childdeclarationName = child.importType(child.getDeclarationName())>
import ${child.getPackageName()}.model.${childdeclarationName};
import ${child.getPackageName()}.model.${childdeclarationName}VO;
import ${child.getPackageName()}.model.${childdeclarationName};
</#foreach>
import ${pojo.getPackageName()}.dao.${declarationName}Dao;
${classbody}
